<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
    <title>操作系统概述</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">操作系统概述</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">inicho</div>
          <div id="share-time" class="text">2021-04-11</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg ed:vSpacing="30" preserveAspectRadio="xMinYMin meet" xmlns:ev="http://www.w3.org/2001/xml-events" ed:hSpacing="30" xmlns="http://www.w3.org/2000/svg" width="2177" id="page0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ed="https://www.edrawsoft.cn/xml/2017/SVGExtensions/" viewBox="0 0 2177 1681" height="1681" ed:name="页面-1">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st52 {fill:#303030;font-family:微软雅黑;font-size:12pt}
.st40 {fill:#303030;font-family:微软雅黑;font-size:14pt}
.st46 {fill:#454545;font-family:微软雅黑;font-size:10pt;font-weight:bold}
.st41 {fill:#454545;font-family:微软雅黑;font-size:10pt}
.st54 {fill:#454545;font-family:微软雅黑;font-size:8.7pt}
.st48 {fill:#454545;font-weight:bold}
.st49 {fill:#454545;font-weight:normal}
.st45 {fill:#454545}
.st39 {fill:#4d5386;font-family:微软雅黑;font-size:14pt;font-weight:bold}
.st44 {fill:#c00000;font-family:微软雅黑;font-size:10pt;font-weight:bold}
.st47 {fill:#c00000;font-family:微软雅黑;font-size:10pt}
.st53 {fill:#c00000;font-family:微软雅黑;font-size:8.7pt;font-weight:bold}
.st43 {fill:#c00000;font-weight:bold}
.st50 {fill:#c00000}
.st42 {font-weight:bold}
.st51 {font-weight:normal}
]]></style>
    <defs/>
    <rect x="0" y="0" width="2177" height="1681" fill="#e9f5f4"/>
    <path stroke-opacity="0.5" fill-opacity="0.5" id="water4" stroke="#d0ebe7" d="M340.2,1658.7L328,1646.5L315.2,1531.7C314.3,1523.5,313.8,1516.1,313.8,1509.5L258.2,1565.1L246.4,1553.3L317.8,1482L329.5,1493.8L342.7,1618.8L343.6,1631.8L407.2,1568.2L419,1580L340.2,1658.7M399.5,1400.3L412.7,1387.1L470.2,1444.7C480.2,1454.7,487,1463.7,490.6,1471.9C494.3,1480.1,495,1488.9,492.8,1498.5C490.5,1508.1,484.6,1517.7,475,1527.3C465.7,1536.7,456.4,1542.7,447.3,1545.4C438.2,1548.1,429.3,1547.7,420.6,1544.2C412,1540.6,402.4,1533.5,391.9,1523L334.3,1465.4L347.5,1452.3L405,1509.7C413.6,1518.4,420.8,1524,426.5,1526.5C432.2,1528.9,438.1,1529.3,444.3,1527.6C450.4,1525.9,456.3,1522.3,462,1516.6C471.7,1506.9,476.4,1497.8,476.1,1489.3C475.8,1480.8,469.4,1470.3,456.9,1457.8L399.5,1400.3M579,1420L569.9,1410.9C572.4,1422.6,569.3,1432.9,560.4,1441.8C554.7,1447.6,547.8,1451.3,539.8,1452.9C531.8,1454.6,523.6,1453.9,515.3,1450.8C507,1447.8,499.1,1442.6,491.7,1435.2C484.5,1428,479.2,1420.3,475.7,1412C472.3,1403.7,471.4,1395.6,473,1387.7C474.7,1379.8,478.5,1372.9,484.5,1366.9C488.8,1362.6,493.6,1359.6,498.8,1358.1C504.1,1356.5,509.2,1356.1,514.3,1356.9L478.6,1321.2L490.7,1309L590.3,1408.6L579,1420M504.3,1422.6C513.5,1431.9,522.4,1436.8,530.9,1437.5C539.3,1438.2,546.2,1435.9,551.5,1430.6C556.9,1425.2,559.2,1418.5,558.6,1410.4C558,1402.3,553.2,1393.8,544.2,1384.8C534.3,1374.9,525.2,1369.6,516.7,1368.8C508.3,1367.9,501.3,1370.3,495.7,1375.9C490.3,1381.3,488,1388.1,488.8,1396.2C489.6,1404.3,494.7,1413.1,504.3,1422.6M582.5,1373.3L592.7,1359.3C598.3,1363.5,603.9,1365.3,609.6,1364.8C615.2,1364.3,620.9,1361.2,626.4,1355.7C632.1,1350.1,635.1,1344.7,635.5,1339.7C635.9,1334.7,634.6,1330.7,631.5,1327.6C628.8,1324.9,625.4,1323.9,621.4,1324.7C618.6,1325.3,613.1,1328.1,604.8,1333.1C593.5,1339.8,585.4,1344,580.2,1345.8C575.1,1347.6,570.2,1348,565.5,1346.8C560.8,1345.7,556.7,1343.4,553.1,1339.8C549.9,1336.6,547.7,1332.9,546.4,1328.7C545.1,1324.5,544.9,1320.2,545.6,1315.9C546.1,1312.6,547.5,1308.8,549.8,1304.5C552.1,1300.3,555.1,1296.2,558.9,1292.5C564.6,1286.8,570.4,1282.7,576.3,1280C582.2,1277.4,587.5,1276.4,592.4,1277.2C597.2,1277.9,602.3,1280.2,607.8,1284.1L597.4,1297.7C593.2,1294.6,588.7,1293.2,584,1293.7C579.3,1294.3,574.6,1296.9,569.8,1301.7C564.2,1307.3,561.1,1312.2,560.6,1316.5C560.1,1320.7,561,1324.1,563.5,1326.6C565.1,1328.2,567,1329.1,569.3,1329.4C571.6,1329.7,574.3,1329.2,577.2,1328C578.9,1327.2,583.6,1324.6,591.2,1320.3C602.1,1313.9,610.1,1309.8,615,1307.8C619.8,1305.9,624.7,1305.4,629.4,1306.2C634.2,1307.1,638.6,1309.6,642.8,1313.8C646.9,1317.8,649.5,1322.9,650.8,1328.8C652,1334.8,651.3,1341,648.8,1347.5C646.3,1353.9,642.2,1360,636.6,1365.7C627.2,1375,618.1,1380.2,609.3,1381.3C600.5,1382.3,591.6,1379.6,582.5,1373.3M716.7,1264.4C716,1272.8,714.4,1279.9,711.8,1285.7C709.2,1291.4,705.5,1296.7,700.7,1301.5C692.8,1309.5,684.7,1313.6,676.6,1314C668.5,1314.4,661.4,1311.6,655.4,1305.5C651.8,1302,649.4,1298,648.1,1293.4C646.8,1288.9,646.6,1284.5,647.4,1280.1C648.2,1275.7,649.8,1271.5,652.2,1267.3C654,1264.2,657,1260,661.2,1254.6C669.9,1243.5,675.8,1234.9,678.8,1228.6C677.2,1226.8,676.1,1225.7,675.7,1225.3C670.7,1220.3,666,1218,661.7,1218.2C655.8,1218.6,649.8,1221.9,643.6,1228C637.9,1233.8,634.6,1239,633.9,1243.8C633.2,1248.5,634.7,1254.1,638.5,1260.6L624.9,1270.9C620.9,1264.7,618.6,1258.8,617.9,1253.1C617.3,1247.5,618.4,1241.5,621.4,1235C624.5,1228.6,629.1,1222.3,635.3,1216.1C641.4,1210,647.2,1205.7,652.5,1203.3C657.8,1200.9,662.4,1199.9,666.4,1200.3C670.4,1200.6,674.5,1202.2,678.5,1204.8C681,1206.5,685,1210,690.4,1215.4L706.7,1231.8C718.1,1243.1,725.6,1250,729.1,1252.5C732.6,1255,736.5,1256.9,740.8,1258.1L728.1,1270.9C724.3,1269.6,720.5,1267.5,716.7,1264.4M688.4,1238.1C685.8,1244.4,680.7,1252.6,673,1262.7C668.7,1268.5,666,1272.9,664.8,1275.8C663.6,1278.8,663.4,1281.8,664,1284.6C664.6,1287.5,666,1290,668.1,1292.1C671.3,1295.4,675.3,1296.9,679.9,1296.6C684.6,1296.3,689.3,1293.8,694,1289C698.7,1284.3,701.9,1279.1,703.5,1273.4C705.1,1267.6,705,1262.1,703.1,1256.8C701.7,1252.7,698.3,1248,692.9,1242.6L688.4,1238.1M764.5,1156.4L752.8,1144.7L794.9,1102.4L831.9,1139.4C830.6,1151,827.8,1161.6,823.5,1171.1C819.2,1180.6,813.4,1188.9,806.2,1196.2C796.4,1206,785.4,1212.8,773.2,1216.6C761,1220.4,749,1220.3,737,1216.5C725,1212.6,714.1,1205.8,704.3,1196C694.6,1186.3,687.6,1175.3,683.2,1162.8C678.9,1150.4,678.5,1138.3,682,1126.6C685.5,1114.9,692.2,1104.1,702.2,1094.2C709.4,1087,717,1081.6,725.2,1078.2C733.4,1074.7,741.2,1073.4,748.6,1074.2C756.1,1075.1,764.1,1078,772.5,1083L763.9,1098.1C757.3,1094.6,751.4,1092.4,746.3,1091.7C741.2,1091.1,735.7,1091.9,729.9,1094.3C724,1096.7,718.5,1100.4,713.5,1105.4C707.5,1111.4,703.2,1117.6,700.6,1123.8C698.1,1130,696.9,1136,697.2,1141.7C697.5,1147.3,698.7,1152.7,700.8,1157.8C704.4,1166.5,709.8,1174.4,717,1181.6C725.9,1190.5,734.9,1196.4,743.9,1199.3C753,1202.3,761.8,1202.2,770.6,1199.3C779.3,1196.4,787,1191.6,793.5,1185C799.3,1179.3,803.7,1172.7,807,1165C810.2,1157.4,812,1150.9,812.3,1145.6L793.8,1127.1L764.5,1156.4M867.9,1131.1L768.3,1031.5L781.5,1018.3L881.1,1117.9L867.9,1131.1M930.4,1124.1L917.6,1114C921,1112,923.7,1110,925.7,1108.1C928.4,1105.3,930.1,1102.7,930.9,1100.2C931.6,1097.6,931.6,1095,931.1,1092.4C930.6,1090.4,928.8,1086.1,925.7,1079.5C925.2,1078.6,924.6,1077.3,923.8,1075.4L824.1,1030.5L837.3,1017.4L894.1,1044.1C901.3,1047.5,908.7,1051.3,916,1055.6C911.8,1048.6,908,1041.4,904.6,1034.1L878,976.7L890.2,964.4L936.2,1065.3C941.1,1076.1,944.3,1083.9,945.7,1088.5C947.5,1094.7,948,1100.1,947.1,1104.8C946.1,1109.5,943.7,1113.8,939.8,1117.7C937.5,1120.1,934.3,1122.2,930.4,1124.1M1009.5,971.7C1008.8,980,1007.2,987.1,1004.6,992.9C1002,998.7,998.3,1003.9,993.5,1008.7C985.5,1016.7,977.5,1020.8,969.4,1021.2C961.3,1021.6,954.2,1018.8,948.2,1012.8C944.6,1009.2,942.2,1005.2,940.9,1000.7C939.6,996.1,939.3,991.7,940.2,987.3C941,982.9,942.6,978.7,945,974.5C946.7,971.5,949.7,967.2,954,961.8C962.7,950.7,968.6,942.1,971.6,935.8C970,934.1,968.9,933,968.5,932.5C963.5,927.5,958.8,925.2,954.5,925.5C948.6,925.8,942.6,929.1,936.4,935.2C930.7,941,927.4,946.2,926.7,951C926,955.8,927.5,961.3,931.3,967.8L917.7,978.1C913.7,971.9,911.3,966,910.7,960.3C910,954.7,911.2,948.7,914.2,942.3C917.2,935.9,921.8,929.6,928,923.3C934.2,917.2,939.9,912.9,945.2,910.5C950.5,908.1,955.2,907.1,959.2,907.5C963.2,907.9,967.2,909.4,971.3,912C973.8,913.7,977.8,917.2,983.2,922.7L999.5,939C1010.9,950.3,1018.3,957.3,1021.9,959.8C1025.4,962.3,1029.3,964.1,1033.6,965.3L1020.9,978.1C1017,976.8,1013.3,974.7,1009.5,971.7M981.2,945.4C978.5,951.6,973.4,959.8,965.8,970C961.5,975.7,958.8,980.1,957.6,983.1C956.4,986.1,956.1,989,956.8,991.9C957.4,994.7,958.7,997.2,960.9,999.4C964.1,1002.6,968.1,1004.1,972.7,1003.8C977.4,1003.5,982.1,1001,986.8,996.2C991.5,991.5,994.7,986.3,996.3,980.6C997.9,974.9,997.8,969.3,995.9,964C994.5,960,991.1,955.2,985.7,949.8L981.2,945.4M1050.1,948.8L950.5,849.2L963.7,836.1L1004.6,877L1056.4,825.2L1015.5,784.3L1028.6,771.1L1128.2,870.7L1115.1,883.9L1068.1,836.9L1016.3,888.7L1063.3,935.7L1050.1,948.8M1141.8,857.2L1129.5,845L1116.8,730.1C1115.9,722,1115.4,714.6,1115.3,708L1059.7,763.6L1047.9,751.8L1119.3,680.5L1131,692.2L1144.2,817.2L1145.2,830.3L1208.8,766.7L1220.5,778.5L1141.8,857.2M1148.2,679.7L1134.1,665.6L1146.4,653.4L1160.4,667.5L1148.2,679.7M1233.7,765.2L1161.6,693.1L1173.8,680.8L1246,753L1233.7,765.2M1275.4,723.6L1264,734.9L1164.4,635.3L1176.7,623.1L1212.2,658.6C1210.9,647,1214.2,637.2,1222.3,629.1C1226.7,624.7,1231.8,621.4,1237.5,619.2C1243.3,617,1249.1,616.3,1254.9,617C1260.7,617.7,1266.6,619.6,1272.6,622.7C1278.6,625.8,1284.2,630,1289.4,635.2C1301.8,647.6,1308.3,660.2,1308.9,673C1309.6,685.9,1305.6,696.6,1297.1,705.2C1288.5,713.7,1278.3,716.8,1266.3,714.5L1275.4,723.6M1238.6,687.1C1247.3,695.7,1254.7,700.8,1260.9,702.3C1271.1,704.8,1279.4,702.7,1286,696.1C1291.3,690.8,1293.6,683.8,1292.9,675.3C1292.1,666.8,1287.2,657.9,1278,648.7C1268.5,639.3,1259.7,634.2,1251.5,633.5C1243.3,632.7,1236.5,635,1231.2,640.3C1225.9,645.6,1223.6,652.6,1224.3,661.1C1225.1,669.6,1229.8,678.3,1238.6,687.1M1359.9,639.1L1233.8,565.9L1247.4,552.4L1327.8,602.5C1336.3,607.7,1344.5,613.1,1352.4,618.7C1344.3,605.5,1339.7,597.9,1338.5,595.8L1290.2,509.6L1306.1,493.7L1370.7,529.8C1386.8,538.8,1401.2,547.9,1413.8,557.4C1408.7,549.8,1403.2,540.9,1397,530.7L1348.7,451.1L1361.9,437.8L1434.2,564.8L1421.5,577.5L1324.6,522.6C1316.5,518,1311.6,515.1,1309.8,514C1313.3,519.6,1316.3,524.5,1318.6,528.6L1373.3,625.6L1359.9,639.1M1479.8,519.2L1380.2,419.6L1400,399.8L1494.1,446.7C1502.8,451.1,1509.3,454.4,1513.6,456.7C1511.1,451.9,1507.6,444.8,1502.9,435.4L1457.5,342.3L1475.2,324.5L1574.8,424.1L1562.1,436.8L1478.8,353.5L1533.2,465.8L1521.3,477.7L1407.7,421.7L1492.5,506.5L1479.8,519.2M1592.8,406.1L1493.2,306.5L1505.5,294.3L1605.1,393.9L1592.8,406.1M1624.7,374.3L1525.1,274.6L1544.9,254.8L1639,301.8C1647.8,306.2,1654.3,309.5,1658.5,311.7C1656.1,307,1652.5,299.9,1647.9,290.5L1602.4,197.3L1620.2,179.6L1719.8,279.2L1707.1,291.9L1623.7,208.5L1678.1,320.8L1666.2,332.7L1552.6,276.8L1637.4,361.5L1624.7,374.3M1685.5,215.2C1673.8,203.4,1665.5,192.7,1660.7,183.1C1656,173.5,1654,164.4,1654.9,155.7C1655.8,147,1659.9,139.1,1667.1,131.8C1672.5,126.5,1678.2,122.9,1684.4,121C1690.6,119.1,1697,118.9,1703.7,120.3C1710.4,121.7,1717.4,124.6,1724.7,128.9C1732,133.3,1740.6,140.4,1750.5,150.2C1762.2,161.9,1770.4,172.5,1775.2,182.1C1780,191.7,1781.9,200.8,1781.1,209.5C1780.2,218.2,1776.1,226.2,1768.8,233.5C1759.2,243.1,1748.2,247.2,1735.9,245.8C1721,244.1,1704.2,233.9,1685.5,215.2M1698.1,202.6C1714.5,219,1727.3,227.9,1736.5,229.5C1745.7,231.1,1753.2,229.1,1758.8,223.5C1764.4,217.9,1766.4,210.4,1764.8,201.1C1763.2,191.9,1754.2,179.1,1737.9,162.8C1721.5,146.4,1708.7,137.4,1699.5,135.9C1690.3,134.3,1682.8,136.4,1677.1,142.1C1671.5,147.7,1669.4,154.6,1670.8,162.7C1672.7,172.9,1681.8,186.3,1698.1,202.6M1881.3,96.4C1891.6,94.5,1900.3,91.9,1907.4,88.7L1912.7,101.7C1903,106.3,1891.8,109.4,1879.1,110.9C1875.8,122.4,1869.7,132.6,1860.8,141.6C1851.8,150.6,1841.4,156.6,1829.8,159.6C1818.1,162.5,1806.3,162.1,1794.5,158.2C1782.6,154.2,1771.8,147.4,1761.9,137.5C1752.1,127.6,1745.1,116.7,1741,104.7C1736.9,92.6,1736.5,80.8,1739.6,69.2C1742.8,57.7,1748.9,47.3,1758,38.2C1767.2,29,1777.7,22.9,1789.4,19.9C1801.2,16.9,1812.9,17.4,1824.7,21.4C1836.4,25.4,1847.2,32.3,1857.1,42.2C1865.3,50.4,1871.4,59,1875.4,68C1879.5,77,1881.4,86.5,1881.3,96.4M1835.4,108.5C1845.1,103.1,1854.6,100,1863.7,99.2C1864.4,84.4,1857.7,69.9,1843.5,55.7C1835.4,47.7,1827,42,1818.2,38.7C1809.5,35.4,1800.8,34.8,1792.2,36.7C1783.6,38.7,1776,42.9,1769.4,49.5C1759.6,59.3,1754.8,70.8,1755.1,84C1755.3,97.2,1762.1,110.5,1775.5,123.9C1788.4,136.8,1801.6,143.6,1814.9,144.1C1828.2,144.6,1839.9,139.9,1849.9,129.9C1854.6,125.2,1858.1,119.9,1860.5,114C1853.7,115.4,1847.5,117.9,1841.8,121.3L1835.4,108.5" fill="#d0ebe7"/>
    <path stroke="#f8ae1a" id="626" transform="matrix(1,0,0,1,1473,452.25)" d="M0.1,0C6,0,5.9,4.7,5.9,4.7L5.9,33.4C5.9,33.4,6.9,37.5,12,37.5C6.9,37.7,5.9,41.6,5.9,41.6L5.9,70.3C5.9,70.3,5.8,75,0,75" stroke-linejoin="round" ed:type="summary" fill="none" ed:idlist="360,362,386,388" ed:parentid="360,362"/>
    <path stroke="#696969" id="125" transform="matrix(1,0,0,1,1179.25,539.75)" d="M-61.5,256.6C-57.8,-78.3,-9.4,-298.6,61.8,-298.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="124"/>
    <path stroke="#696969" id="127" transform="matrix(1,0,0,1,1179.25,862.88)" d="M-6.8,17.5C12.2,22,35.4,24.5,61.8,24.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="126"/>
    <path stroke="#002060" id="129" transform="matrix(1,0,0,1,1332.5,189.56)" d="M-13.5,51.6C5.4,51.6,-13.5,-51.6,13.5,-51.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="128"/>
    <path stroke="#696969" id="131" transform="matrix(1,0,0,1,1332.5,205.19)" d="M-13.5,35.9C4.3,35.9,-11,-35.9,13.5,-35.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="130"/>
    <path stroke="#696969" id="133" transform="matrix(1,0,0,1,1332.5,220.81)" d="M-13.5,20.3C1.8,20.3,-5.1,-20.3,13.5,-20.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="132"/>
    <path stroke="#696969" id="139" transform="matrix(1,0,0,1,1389.5,814.31)" d="M-13.5,73.1C5.4,73.1,-13.5,-73.1,13.5,-73.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="126" ed:tosuperid="138"/>
    <path stroke="#696969" id="147" transform="matrix(1,0,0,1,1389.5,909.19)" d="M-13.5,-21.8C2.1,-21.8,-5.8,21.8,13.5,21.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="126" ed:tosuperid="146"/>
    <path stroke="#696969" id="151" transform="matrix(1,0,0,1,1389.5,972.81)" d="M-13.5,-85.4C5.4,-85.4,-13.5,85.4,13.5,85.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="126" ed:tosuperid="150"/>
    <path stroke="#696969" id="153" transform="matrix(1,0,0,1,1541.5,710)" d="M-13.5,31.3C3.7,31.3,-9.5,-31.3,13.5,-31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="138" ed:tosuperid="152"/>
    <path stroke="#696969" id="161" transform="matrix(1,0,0,1,1541.5,725.63)" d="M-13.5,15.6C0.9,15.6,-2.9,-15.6,13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="138" ed:tosuperid="160"/>
    <path stroke="#696969" id="163" transform="matrix(1,0,0,1,1541.5,741.25)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="138" ed:tosuperid="162"/>
    <path stroke="#696969" id="165" transform="matrix(1,0,0,1,1541.5,756.88)" d="M-13.5,-15.6C0.9,-15.6,-2.9,15.6,13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="138" ed:tosuperid="164"/>
    <path stroke="#696969" id="167" transform="matrix(1,0,0,1,1525.5,907.56)" d="M-13.5,23.4C2.4,23.4,-6.5,-23.4,13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="146" ed:tosuperid="166"/>
    <path stroke="#696969" id="169" transform="matrix(1,0,0,1,1525.5,947.75)" d="M-13.5,-16.8C1.1,-16.8,-3.4,16.8,13.5,16.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="146" ed:tosuperid="168"/>
    <path stroke="#696969" id="171" transform="matrix(1,0,0,1,1525.5,963.38)" d="M-13.5,-32.4C3.8,-32.4,-9.9,32.4,13.5,32.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="146" ed:tosuperid="170"/>
    <path stroke="#696969" id="173" transform="matrix(1,0,0,1,1538.5,1058.25)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="150" ed:tosuperid="172"/>
    <path stroke="#696969" id="175" transform="matrix(1,0,0,1,1773.5,869.06)" d="M-13.5,15.1C0.7,15.1,-2.6,-15.1,13.5,-15.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="166" ed:tosuperid="174"/>
    <path stroke="#696969" id="177" transform="matrix(1,0,0,1,1773.5,894.19)" d="M-13.5,-10.1C-0.4,-10.1,-0.1,10.1,13.5,10.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="166" ed:tosuperid="176"/>
    <path stroke="#696969" id="181" transform="matrix(1,0,0,1,1804.5,964.5)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="168" ed:tosuperid="180"/>
    <path stroke="#696969" id="359" transform="matrix(1,0,0,1,1179.25,687.5)" d="M-60.8,108.9C-53.7,-48.6,-6.5,-150.9,61.8,-150.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="358"/>
    <path stroke="#696969" id="361" transform="matrix(1,0,0,1,1332.5,516.31)" d="M-13.5,20.3C1.8,20.3,-5.1,-20.3,13.5,-20.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="358" ed:tosuperid="360"/>
    <path stroke="#696969" id="363" transform="matrix(1,0,0,1,1332.5,531.94)" d="M-13.5,4.7C-1.6,4.7,2.8,-4.7,13.5,-4.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="358" ed:tosuperid="362"/>
    <path stroke="#696969" id="365" transform="matrix(1,0,0,1,1332.5,555.38)" d="M-13.5,-18.8C1.5,-18.8,-4.4,18.8,13.5,18.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="358" ed:tosuperid="364"/>
    <path stroke="#696969" id="367" transform="matrix(1,0,0,1,1332.5,578.81)" d="M-13.5,-42.2C4.9,-42.2,-12.4,42.2,13.5,42.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="358" ed:tosuperid="366"/>
    <path stroke="#696969" id="374" transform="matrix(1,0,0,1,1541.5,772.5)" d="M-13.5,-31.3C3.7,-31.3,-9.5,31.3,13.5,31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="138" ed:tosuperid="373"/>
    <path stroke="#696969" id="383" transform="matrix(1,0,0,1,1525.5,979)" d="M-13.5,-48C5.3,-48,-13.2,48,13.5,48" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="146" ed:tosuperid="382"/>
    <path stroke="#696969" id="391" transform="matrix(1,0,0,1,1428.5,566.31)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="364" ed:tosuperid="390"/>
    <path stroke="#696969" id="393" transform="matrix(1,0,0,1,1428.5,581.94)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="364" ed:tosuperid="392"/>
    <path stroke="#696969" id="397" transform="matrix(1,0,0,1,1055.75,838.38)" d="M1.3,0C-16.6,0,-37.9,0,-61.8,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="396"/>
    <path stroke="#696969" id="399" transform="matrix(1,0,0,1,1055.75,567.94)" d="M61.5,228.4C57.4,-72.6,9.1,-270.4,-61.8,-270.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="398"/>
    <path stroke="#696969" id="401" transform="matrix(1,0,0,1,1179.25,1111.06)" d="M-61.5,-230.7C-57.4,73.1,-9.1,272.7,61.8,272.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="400"/>
    <path stroke="#002060" id="403" transform="matrix(1,0,0,1,1389.5,1281.13)" d="M-13.5,102.6C5.4,102.6,-13.5,-102.6,13.5,-102.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="402"/>
    <path stroke="#002060" id="405" transform="matrix(1,0,0,1,1389.5,1335.44)" d="M-13.5,48.3C5.3,48.3,-13.2,-48.3,13.5,-48.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="404"/>
    <path stroke="#002060" id="407" transform="matrix(1,0,0,1,1389.5,1402.19)" d="M-13.5,-18.4C1.4,-18.4,-4.3,18.4,13.5,18.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="406"/>
    <path stroke="#002060" id="409" transform="matrix(1,0,0,1,1389.5,1436.31)" d="M-13.5,-52.6C5.4,-52.6,-13.5,52.6,13.5,52.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="408"/>
    <path stroke="#002060" id="411" transform="matrix(1,0,0,1,1389.5,1467.5)" d="M-13.5,-83.8C5.4,-83.8,-13.5,83.8,13.5,83.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="410"/>
    <path stroke="#002060" id="413" transform="matrix(1,0,0,1,1389.5,1483.13)" d="M-13.5,-99.4C5.4,-99.4,-13.5,99.4,13.5,99.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="412"/>
    <path stroke="#002060" id="415" transform="matrix(1,0,0,1,1499.5,1268.63)" d="M-13.5,18.5C1.5,18.5,-4.3,-18.5,13.5,-18.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="404" ed:tosuperid="414"/>
    <path stroke="#002060" id="417" transform="matrix(1,0,0,1,1499.5,1315.13)" d="M-13.5,-28C3.2,-28,-8.3,28,13.5,28" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="404" ed:tosuperid="416"/>
    <path stroke="#002060" id="419" transform="matrix(1,0,0,1,1389.5,1498.75)" d="M-13.5,-115C5.4,-115,-13.5,115,13.5,115" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="400" ed:tosuperid="418"/>
    <path stroke="#002060" id="421" transform="matrix(1,0,0,1,1512.5,1178.44)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="402" ed:tosuperid="420"/>
    <path stroke="#002060" id="423" transform="matrix(1,0,0,1,1818.5,1245.31)" d="M-13.5,4.8C-1.6,4.8,2.8,-4.8,13.5,-4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="414" ed:tosuperid="422"/>
    <path stroke="#002060" id="425" transform="matrix(1,0,0,1,1818.5,1260.81)" d="M-13.5,-10.7C-0.2,-10.7,-0.4,10.7,13.5,10.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="414" ed:tosuperid="424"/>
    <path stroke="#002060" id="427" transform="matrix(1,0,0,1,1786.5,1338.31)" d="M-13.5,4.8C-1.6,4.8,2.8,-4.8,13.5,-4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="426"/>
    <path stroke="#002060" id="429" transform="matrix(1,0,0,1,1786.5,1353.81)" d="M-13.5,-10.7C-0.2,-10.7,-0.4,10.7,13.5,10.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="428"/>
    <path stroke="#002060" id="431" transform="matrix(1,0,0,1,1543.5,1408.06)" d="M-13.5,12.6C0.2,12.6,-1.4,-12.6,13.5,-12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="406" ed:tosuperid="430"/>
    <path stroke="#002060" id="433" transform="matrix(1,0,0,1,1543.5,1423.56)" d="M-13.5,-2.9C-2,-2.9,3.8,2.9,13.5,2.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="406" ed:tosuperid="432"/>
    <path stroke="#002060" id="435" transform="matrix(1,0,0,1,1533.5,1473.31)" d="M-13.5,15.6C0.8,15.6,-2.9,-15.6,13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="408" ed:tosuperid="434"/>
    <path stroke="#002060" id="437" transform="matrix(1,0,0,1,1533.5,1488.94)" d="M-13.5,-0.1C-2.7,-0.1,5.4,0.1,13.5,0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="408" ed:tosuperid="436"/>
    <path stroke="#002060" id="439" transform="matrix(1,0,0,1,1533.5,1504.44)" d="M-13.5,-15.6C0.8,-15.6,-2.9,15.6,13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="408" ed:tosuperid="438"/>
    <path stroke="#002060" id="445" transform="matrix(1,0,0,1,1551.5,1613.69)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="418" ed:tosuperid="444"/>
    <path stroke="#002060" id="451" transform="matrix(1,0,0,1,769.5,210.19)" d="M13.5,87.3C-5.4,87.3,13.5,-87.3,-13.5,-87.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="398" ed:tosuperid="450"/>
    <path stroke="#002060" id="453" transform="matrix(1,0,0,1,769.5,303.94)" d="M13.5,-6.4C1.2,-6.4,-1.9,6.4,-13.5,6.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="398" ed:tosuperid="452"/>
    <path stroke="#002060" id="455" transform="matrix(1,0,0,1,769.5,397.44)" d="M13.5,-99.9C-5.4,-99.9,13.5,99.9,-13.5,99.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="398" ed:tosuperid="454"/>
    <path stroke="#002060" id="457" transform="matrix(1,0,0,1,672.5,91.63)" d="M13.5,31.3C-3.7,31.3,9.5,-31.3,-13.5,-31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="456"/>
    <path stroke="#002060" id="459" transform="matrix(1,0,0,1,672.5,127.63)" d="M13.5,-4.8C1.6,-4.8,-2.8,4.8,-13.5,4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="458"/>
    <path stroke="#002060" id="461" transform="matrix(1,0,0,1,672.5,154.13)" d="M13.5,-31.3C-3.7,-31.3,9.5,31.3,-13.5,31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="460"/>
    <path stroke="#002060" id="463" transform="matrix(1,0,0,1,575.5,52.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="456" ed:tosuperid="462"/>
    <path stroke="#002060" id="465" transform="matrix(1,0,0,1,575.5,68.19)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="456" ed:tosuperid="464"/>
    <path stroke="#002060" id="467" transform="matrix(1,0,0,1,541.5,119.81)" d="M13.5,12.6C-0.2,12.6,1.4,-12.6,-13.5,-12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="458" ed:tosuperid="466"/>
    <path stroke="#002060" id="469" transform="matrix(1,0,0,1,541.5,135.44)" d="M13.5,-3.1C2,-3.1,-3.7,3.1,-13.5,3.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="458" ed:tosuperid="468"/>
    <path stroke="#002060" id="471" transform="matrix(1,0,0,1,575.5,177.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="460" ed:tosuperid="470"/>
    <path stroke="#002060" id="473" transform="matrix(1,0,0,1,575.5,193.19)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="460" ed:tosuperid="472"/>
    <path stroke="#002060" id="475" transform="matrix(1,0,0,1,625.5,271.31)" d="M13.5,39.1C-4.6,39.1,11.7,-39.1,-13.5,-39.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="452" ed:tosuperid="474"/>
    <path stroke="#002060" id="477" transform="matrix(1,0,0,1,625.5,286.94)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="452" ed:tosuperid="476"/>
    <path stroke="#002060" id="479" transform="matrix(1,0,0,1,625.5,302.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="452" ed:tosuperid="478"/>
    <path stroke="#002060" id="481" transform="matrix(1,0,0,1,625.5,333.81)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="452" ed:tosuperid="480"/>
    <path stroke="#002060" id="483" transform="matrix(1,0,0,1,554.5,294.69)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="478" ed:tosuperid="482"/>
    <path stroke="#002060" id="485" transform="matrix(1,0,0,1,586.5,474.06)" d="M13.5,23.3C-2.4,23.3,6.5,-23.3,-13.5,-23.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="454" ed:tosuperid="484"/>
    <path stroke="#002060" id="487" transform="matrix(1,0,0,1,586.5,525.44)" d="M13.5,-28.1C-3.2,-28.1,8.4,28.1,-13.5,28.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="454" ed:tosuperid="486"/>
    <path stroke="#002060" id="489" transform="matrix(1,0,0,1,502.5,450.75)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="484" ed:tosuperid="488"/>
    <path stroke="#002060" id="491" transform="matrix(1,0,0,1,502.5,466.25)" d="M13.5,-15.5C-0.8,-15.5,2.8,15.5,-13.5,15.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="484" ed:tosuperid="490"/>
    <path stroke="#002060" id="493" transform="matrix(1,0,0,1,424.5,341.63)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="480" ed:tosuperid="492"/>
    <path stroke="#002060" id="495" transform="matrix(1,0,0,1,424.5,357.25)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="480" ed:tosuperid="494"/>
    <path stroke="#002060" id="497" transform="matrix(1,0,0,1,424.5,372.88)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="480" ed:tosuperid="496"/>
    <path stroke="#002060" id="499" transform="matrix(1,0,0,1,454.5,548.75)" d="M13.5,4.8C1.6,4.8,-2.8,-4.8,-13.5,-4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="486" ed:tosuperid="498"/>
    <path stroke="#002060" id="501" transform="matrix(1,0,0,1,454.5,564.25)" d="M13.5,-10.8C0.2,-10.8,0.4,10.8,-13.5,10.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="486" ed:tosuperid="500"/>
    <path stroke="#002060" id="509" transform="matrix(1,0,0,1,386.5,107.19)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="466" ed:tosuperid="508"/>
    <path stroke="#002060" id="511" transform="matrix(1,0,0,1,405.5,138.44)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="468" ed:tosuperid="510"/>
    <path stroke="#002060" id="513" transform="matrix(1,0,0,1,478.5,169.69)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="470" ed:tosuperid="512"/>
    <path stroke="#002060" id="515" transform="matrix(1,0,0,1,478.5,200.94)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="472" ed:tosuperid="514"/>
    <path stroke="#002060" id="517" transform="matrix(1,0,0,1,478.5,44.69)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="462" ed:tosuperid="516"/>
    <path stroke="#002060" id="519" transform="matrix(1,0,0,1,502.5,435.25)" d="M13.5,15.5C-0.8,15.5,2.8,-15.5,-13.5,-15.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="484" ed:tosuperid="518"/>
    <path stroke="#002060" id="521" transform="matrix(1,0,0,1,454.5,533.25)" d="M13.5,20.3C-1.8,20.3,5.1,-20.3,-13.5,-20.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="486" ed:tosuperid="520"/>
    <path stroke="#002060" id="523" transform="matrix(1,0,0,1,845.5,735.56)" d="M13.5,102.8C-5.4,102.8,13.5,-102.8,-13.5,-102.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="396" ed:tosuperid="522"/>
    <path stroke="#002060" id="525" transform="matrix(1,0,0,1,845.5,758.88)" d="M13.5,79.5C-5.4,79.5,13.5,-79.5,-13.5,-79.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="396" ed:tosuperid="524"/>
    <path stroke="#002060" id="527" transform="matrix(1,0,0,1,845.5,813.44)" d="M13.5,24.9C-2.7,24.9,7.1,-24.9,-13.5,-24.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="396" ed:tosuperid="526"/>
    <path stroke="#002060" id="529" transform="matrix(1,0,0,1,845.5,875.94)" d="M13.5,-37.6C-4.5,-37.6,11.4,37.6,-13.5,37.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="396" ed:tosuperid="528"/>
    <path stroke="#002060" id="531" transform="matrix(1,0,0,1,845.5,930.38)" d="M13.5,-92C-5.4,-92,13.5,92,-13.5,92" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="396" ed:tosuperid="530"/>
    <path stroke="#002060" id="533" transform="matrix(1,0,0,1,677.5,671.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="524" ed:tosuperid="532"/>
    <path stroke="#002060" id="535" transform="matrix(1,0,0,1,677.5,687.06)" d="M13.5,-7.7C0.9,-7.7,-1.2,7.7,-13.5,7.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="524" ed:tosuperid="534"/>
    <path stroke="#002060" id="537" transform="matrix(1,0,0,1,695.5,777.63)" d="M13.5,10.9C0.2,10.9,0.5,-10.9,-13.5,-10.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="526" ed:tosuperid="536"/>
    <path stroke="#002060" id="539" transform="matrix(1,0,0,1,695.5,811.94)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="526" ed:tosuperid="538"/>
    <path stroke="#002060" id="319" transform="matrix(1,0,0,1,473.5,746.38)" d="M13.5,20.4C-1.8,20.4,5.2,-20.4,-13.5,-20.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="536" ed:tosuperid="318"/>
    <path stroke="#002060" id="321" transform="matrix(1,0,0,1,473.5,769.81)" d="M13.5,-3.1C2,-3.1,-3.7,3.1,-13.5,3.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="536" ed:tosuperid="320"/>
    <path stroke="#002060" id="323" transform="matrix(1,0,0,1,376.5,765.06)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="320" ed:tosuperid="322"/>
    <path stroke="#002060" id="325" transform="matrix(1,0,0,1,376.5,780.69)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="320" ed:tosuperid="324"/>
    <path stroke="#002060" id="331" transform="matrix(1,0,0,1,533.5,827.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="538" ed:tosuperid="330"/>
    <path stroke="#002060" id="335" transform="matrix(1,0,0,1,533.5,843.19)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="538" ed:tosuperid="334"/>
    <path stroke="#002060" id="337" transform="matrix(1,0,0,1,618.5,897.88)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="528" ed:tosuperid="336"/>
    <path stroke="#002060" id="339" transform="matrix(1,0,0,1,618.5,913.5)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="528" ed:tosuperid="338"/>
    <path stroke="#002060" id="341" transform="matrix(1,0,0,1,618.5,929.13)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="528" ed:tosuperid="340"/>
    <path stroke="#002060" id="343" transform="matrix(1,0,0,1,696.5,999.06)" d="M13.5,23.3C-2.4,23.3,6.5,-23.3,-13.5,-23.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="530" ed:tosuperid="342"/>
    <path stroke="#002060" id="345" transform="matrix(1,0,0,1,696.5,1014.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="530" ed:tosuperid="344"/>
    <path stroke="#002060" id="347" transform="matrix(1,0,0,1,696.5,1030.06)" d="M13.5,-7.7C0.9,-7.7,-1.2,7.7,-13.5,7.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="530" ed:tosuperid="346"/>
    <path stroke="#002060" id="350" transform="matrix(1,0,0,1,696.5,1045.56)" d="M13.5,-23.2C-2.4,-23.2,6.4,23.2,-13.5,23.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="530" ed:tosuperid="349"/>
    <path stroke="#002060" id="368" transform="matrix(1,0,0,1,709.5,632.69)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="522" ed:tosuperid="351"/>
    <path stroke="#696969" id="370" transform="matrix(1,0,0,1,1055.75,1108.81)" d="M61.5,-228.4C57.4,72.6,9.1,270.4,-61.8,270.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="369"/>
    <path stroke="#002060" id="378" transform="matrix(1,0,0,1,843.5,1307.56)" d="M13.5,71.7C-5.4,71.7,13.5,-71.7,-13.5,-71.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="369" ed:tosuperid="377"/>
    <path stroke="#002060" id="380" transform="matrix(1,0,0,1,843.5,1432.31)" d="M13.5,-53.1C-5.4,-53.1,13.5,53.1,-13.5,53.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="369" ed:tosuperid="379"/>
    <path stroke="#002060" id="384" transform="matrix(1,0,0,1,843.5,1494.56)" d="M13.5,-115.3C-5.4,-115.3,13.5,115.3,-13.5,115.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="369" ed:tosuperid="381"/>
    <path stroke="#002060" id="394" transform="matrix(1,0,0,1,608.5,1181.19)" d="M13.5,54.7C-5.4,54.7,13.5,-54.7,-13.5,-54.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="377" ed:tosuperid="385"/>
    <path stroke="#002060" id="440" transform="matrix(1,0,0,1,608.5,1196.81)" d="M13.5,39.1C-4.6,39.1,11.7,-39.1,-13.5,-39.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="377" ed:tosuperid="395"/>
    <path stroke="#002060" id="442" transform="matrix(1,0,0,1,608.5,1212.44)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="377" ed:tosuperid="441"/>
    <path stroke="#002060" id="446" transform="matrix(1,0,0,1,608.5,1259.31)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="377" ed:tosuperid="443"/>
    <path stroke="#002060" id="448" transform="matrix(1,0,0,1,537.5,1251.5)" d="M13.5,31.3C-3.7,31.3,9.5,-31.3,-13.5,-31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="443" ed:tosuperid="447"/>
    <path stroke="#002060" id="502" transform="matrix(1,0,0,1,537.5,1267.13)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="443" ed:tosuperid="449"/>
    <path stroke="#002060" id="504" transform="matrix(1,0,0,1,537.5,1282.75)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="443" ed:tosuperid="503"/>
    <path stroke="#002060" id="506" transform="matrix(1,0,0,1,537.5,1298.38)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="443" ed:tosuperid="505"/>
    <path stroke="#002060" id="540" transform="matrix(1,0,0,1,537.5,1314)" d="M13.5,-31.3C-3.7,-31.3,9.5,31.3,-13.5,31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="443" ed:tosuperid="507"/>
    <path stroke="#002060" id="542" transform="matrix(1,0,0,1,636.5,1462.06)" d="M13.5,23.3C-2.4,23.3,6.5,-23.3,-13.5,-23.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="379" ed:tosuperid="541"/>
    <path stroke="#002060" id="544" transform="matrix(1,0,0,1,636.5,1477.56)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="379" ed:tosuperid="543"/>
    <path stroke="#002060" id="546" transform="matrix(1,0,0,1,636.5,1508.56)" d="M13.5,-23.2C-2.4,-23.2,6.4,23.2,-13.5,23.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="379" ed:tosuperid="545"/>
    <path stroke="#002060" id="548" transform="matrix(1,0,0,1,660.5,1586.44)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="381" ed:tosuperid="547"/>
    <path stroke="#002060" id="550" transform="matrix(1,0,0,1,660.5,1602.06)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="381" ed:tosuperid="549"/>
    <path stroke="#002060" id="552" transform="matrix(1,0,0,1,660.5,1617.69)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="381" ed:tosuperid="551"/>
    <path stroke="#002060" id="554" transform="matrix(1,0,0,1,660.5,1633.31)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="381" ed:tosuperid="553"/>
    <path stroke="#002060" id="566" transform="matrix(1,0,0,1,636.5,1493.06)" d="M13.5,-7.7C0.9,-7.7,-1.2,7.7,-13.5,7.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="379" ed:tosuperid="565"/>
    <path stroke="#696969" id="594" transform="matrix(1,0,0,1,1332.5,253.69)" d="M-13.5,-12.6C0.2,-12.6,-1.4,12.6,13.5,12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="593"/>
    <path stroke="#002060" id="596" transform="matrix(1,0,0,1,1467.5,256.81)" d="M-13.5,9.4C-0.5,9.4,0.3,-9.4,13.5,-9.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="593" ed:tosuperid="595"/>
    <path stroke="#002060" id="598" transform="matrix(1,0,0,1,1467.5,292.81)" d="M-13.5,-26.6C3,-26.6,-7.8,26.6,13.5,26.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="593" ed:tosuperid="597"/>
    <path stroke="#002060" id="600" transform="matrix(1,0,0,1,1564.5,239.56)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="595" ed:tosuperid="599"/>
    <path stroke="#002060" id="602" transform="matrix(1,0,0,1,1564.5,255.19)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="595" ed:tosuperid="601"/>
    <path stroke="#002060" id="608" transform="matrix(1,0,0,1,1609.5,306.81)" d="M-13.5,12.6C0.2,12.6,-1.4,-12.6,13.5,-12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="597" ed:tosuperid="607"/>
    <path stroke="#002060" id="610" transform="matrix(1,0,0,1,1609.5,322.44)" d="M-13.5,-3.1C-2,-3.1,3.7,3.1,13.5,3.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="597" ed:tosuperid="609"/>
    <path stroke="#435fbc" id="615" transform="matrix(1,0,0,1,843.5,1385.69)" d="M13.5,-6.4C1.2,-6.4,-1.9,6.4,-13.5,6.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="369" ed:tosuperid="614"/>
    <path stroke="#002060" id="617" transform="matrix(1,0,0,1,684.5,1384.31)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="614" ed:tosuperid="616"/>
    <path stroke="#002060" id="619" transform="matrix(1,0,0,1,684.5,1399.94)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="614" ed:tosuperid="618"/>
    <path stroke="#696969" id="621" transform="matrix(1,0,0,1,1389.5,996.25)" d="M-13.5,-108.9C5.4,-108.9,-13.5,108.9,13.5,108.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="126" ed:tosuperid="620"/>
    <path stroke="#696969" id="623" transform="matrix(1,0,0,1,1512.5,1097.31)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="620" ed:tosuperid="622"/>
    <path stroke="#696969" id="625" transform="matrix(1,0,0,1,1512.5,1112.94)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="620" ed:tosuperid="624"/>
    <path stroke="#002060" id="635" transform="matrix(1,0,0,1,1643.5,1488.94)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="436" ed:tosuperid="634"/>
    <path stroke="#002060" id="637" transform="matrix(1,0,0,1,1643.5,1457.69)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="434" ed:tosuperid="636"/>
    <path stroke="#002060" id="631" transform="matrix(1,0,0,1,1818.5,1229.81)" d="M-13.5,20.3C1.8,20.3,-5.1,-20.3,13.5,-20.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="414" ed:tosuperid="630"/>
    <path stroke="#002060" id="638" transform="matrix(1,0,0,1,1786.5,1322.81)" d="M-13.5,20.3C1.8,20.3,-5.1,-20.3,13.5,-20.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="633"/>
    <path stroke="#002060" id="640" transform="matrix(1,0,0,1,1332.5,173.94)" d="M-13.5,67.2C5.4,67.2,-13.5,-67.2,13.5,-67.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="639"/>
    <path stroke="#002060" id="646" transform="matrix(1,0,0,1,1512.5,1550.69)" d="M-13.5,0.6C-2.7,0.6,5.4,-0.6,13.5,-0.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="410" ed:tosuperid="645"/>
    <path stroke="#002060" id="648" transform="matrix(1,0,0,1,1525.5,1582.5)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="412" ed:tosuperid="647"/>
    <path stroke="#002060" id="650" transform="matrix(1,0,0,1,1726.5,1581.94)" d="M-13.5,0.6C-2.7,0.6,5.4,-0.6,13.5,-0.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="647" ed:tosuperid="649"/>
    <path stroke="#002060" id="651" transform="matrix(1,0,0,1,465.5,75.94)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="464" ed:tosuperid="644"/>
    <path stroke="#696969" id="653" transform="matrix(1,0,0,1,1773.5,908.69)" d="M-13.5,-24.6C2.6,-24.6,-7,24.6,13.5,24.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="166" ed:tosuperid="652"/>
    <path stroke="#002060" id="656" transform="matrix(1,0,0,1,1563.5,366.19)" d="M-13.5,9.4C-0.5,9.4,0.3,-9.4,13.5,-9.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="660"/>
    <path stroke="#002060" id="657" transform="matrix(1,0,0,1,1563.5,381.81)" d="M-13.5,-6.2C-1.2,-6.2,2,6.2,13.5,6.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="661"/>
    <path stroke="#002060" id="658" transform="matrix(1,0,0,1,1563.5,397.44)" d="M-13.5,-21.8C2.1,-21.8,-5.8,21.8,13.5,21.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="662"/>
    <path stroke="#002060" id="663" transform="matrix(1,0,0,1,1332.5,308.38)" d="M-13.5,-67.3C5.4,-67.3,-13.5,67.3,13.5,67.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="659"/>
    <g ed:topictype="mainidea" ed:height="84" id="101" transform="matrix(1,0,0,1,1057,796.38)" ed:width="121" ed:layout="map">
        <path stroke="#435fbc" d="M4,0L117,0C119.7,0,121,1.3,121,4L121,80C121,82.7,119.7,84,117,84L4,84C1.3,84,0,82.7,0,80L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="3" fill="#ebebeb"/>
        <text class="st39">
            <tspan x="21" style="white-space:pre" y="34.5">操作系统</tspan>
            <tspan x="46" style="white-space:pre" y="60.5">OS</tspan>
        </text>
    </g>
    <g ed:height="42" id="124" transform="matrix(1,0,0,1,1241,220.13)" ed:width="78" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">概念</tspan>
        </text>
    </g>
    <g ed:height="42" id="126" transform="matrix(1,0,0,1,1241,866.38)" ed:width="135" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L131,0C133.7,0,135,1.3,135,4L135,38C135,40.7,133.7,42,131,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">功能和目标</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="128" transform="matrix(1,0,0,1,1346,113.25)" ed:width="421" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L421,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">管理计算机硬件的程序：</tspan>
            <tspan style="white-space:pre">负责管理协调硬件、软件等计算机资源的工作</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="130" transform="matrix(1,0,0,1,1346,144.5)" ed:width="486" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L486,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">充当计算机硬件和计算及用户的中介：</tspan>
            <tspan style="white-space:pre">为上层用户、应用程序提供简单易用的服务</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="132" transform="matrix(1,0,0,1,1346,175.75)" ed:width="455" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L455,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16">是计算机中最基本的</tspan>
            <tspan style="white-space:pre" class="st43">系统软件</tspan>
            <tspan style="white-space:pre">（裸机上加载的第一层软件），而不是硬件</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>裸机：未配置任何软件的计算机&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(429,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <symbol id="imgnote">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="138" transform="matrix(1,0,0,1,1403,716.5)" ed:width="125" ed:parentid="126" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L125,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st44">
            <tspan x="8" style="white-space:pre" y="16">资源</tspan>
            <tspan style="white-space:pre" class="st45">的管理者 P19</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="146" transform="matrix(1,0,0,1,1403,906.25)" ed:width="109" ed:parentid="126" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">向用户提供服务</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="150" transform="matrix(1,0,0,1,1403,1033.5)" ed:width="122" ed:parentid="126" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">对硬件机器的扩展</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="152" transform="matrix(1,0,0,1,1555,654)" ed:width="217" ed:parentid="138" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L217,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">处理器管理（进程管理）——CPU</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="160" transform="matrix(1,0,0,1,1555,685.25)" ed:width="137" ed:parentid="138" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L137,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">存储器管理——内存</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="162" transform="matrix(1,0,0,1,1555,716.5)" ed:width="163" ed:parentid="138" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L163,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">文件管理——外存、文件</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="164" transform="matrix(1,0,0,1,1555,747.75)" ed:width="158" ed:parentid="138" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L158,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">设备管理——I/O等外设</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="166" transform="matrix(1,0,0,1,1539,859.38)" ed:width="221" ed:parentid="146" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L221,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st47">
            <tspan x="8" style="white-space:pre" y="16" class="st48">命令接口</tspan>
            <tspan style="white-space:pre" class="st45">（允许用户</tspan>
            <tspan style="white-space:pre">直接</tspan>
            <tspan style="white-space:pre" class="st45">使用）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>和“程序接口”统称为“用户接口”（&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>Interface&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>）&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(195,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="168" transform="matrix(1,0,0,1,1539,939.75)" ed:width="252" ed:parentid="146" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L252,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st47">
            <tspan x="8" style="white-space:pre" y="16" class="st48">程序接口</tspan>
            <tspan style="white-space:pre" class="st45">（允许用户</tspan>
            <tspan style="white-space:pre">通过程序间接</tspan>
            <tspan style="white-space:pre" class="st45">调用）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="170" transform="matrix(1,0,0,1,1539,971)" ed:width="146" ed:parentid="146" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L146,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">GUI（用户图形界面）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="172" transform="matrix(1,0,0,1,1552,1033.5)" ed:width="278" ed:parentid="150" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L278,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">扩充机器</tspan>
            <tspan style="white-space:pre">：覆盖了软件的机器，也称为虚拟机</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="174" transform="matrix(1,0,0,1,1787,810.25)" ed:width="242" ed:parentid="166" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L242,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">联机命令接口</tspan>
            <tspan style="white-space:pre">：</tspan>
            <tspan x="8" style="white-space:pre" y="35">用户说一句，系统做一句，</tspan>
            <tspan style="white-space:pre" class="st42">on-line</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>也叫“交互式命令接口”.&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>受系统控制&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(216,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="43.75" id="176" transform="matrix(1,0,0,1,1787,860.5)" ed:width="240" ed:parentid="166" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L240,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">脱机命令接口</tspan>
            <tspan style="white-space:pre">：</tspan>
            <tspan x="8" style="white-space:pre" y="35">用户说一堆，系统做一堆，</tspan>
            <tspan style="white-space:pre" class="st42">off-lne</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>批处理命令接口&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>不受系统控制&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(214,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="180" transform="matrix(1,0,0,1,1818,939.75)" ed:width="312" ed:parentid="168" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L312,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st44">
            <tspan x="8" style="white-space:pre" y="16" class="st45">由一组</tspan>
            <tspan style="white-space:pre">系统调用</tspan>
            <tspan style="white-space:pre" class="st45">组成，</tspan>
            <tspan style="white-space:pre" class="st49">在</tspan>
            <tspan style="white-space:pre" class="st45">程序级</tspan>
            <tspan style="white-space:pre" class="st49">给予用户的支持</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>程序接口=系统调用&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>易错概念：系统调用=系统调用命令=广义指令&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(286,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="42" id="358" transform="matrix(1,0,0,1,1241,515.63)" ed:width="78" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">特征</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="360" transform="matrix(1,0,0,1,1346,452.25)" ed:width="122" ed:parentid="358" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L122,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">并发 </tspan>
            <tspan x="8" style="white-space:pre" y="35">Concurrency</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>指两个或多个事件在同一时间间隔内发生。注意&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>宏观上同时发生&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的，但&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>微观上可能是交替发生&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. &lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>并发和共享&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>是两个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>最基本的特征&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>，二者&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>互为存在条件&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. &lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>操作系统的并发性&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>指计算机系统中同时存在着多个运行着的程序&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 一个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>单核处理机（CPU）&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>同一时刻只能执行一个程序，因此操作系统会负责协调多个程序交替执行&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 注意区分“并行”(&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>Parallelism&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>)：两个或多个事件在【同一时刻】同时发生&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>5. 操作系统是伴随着“多道程序技术”出现的。因此，操作系统和程序并发是一起诞生的&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>（单CPU上任务并发，或多CPU上任务并行）&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(96,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="362" transform="matrix(1,0,0,1,1346,502.5)" ed:width="65" ed:parentid="358" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L65,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">共享</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>即资源共享，是指系统中资源可供内存中多个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; font-weight:600; color:#c00000;&quot;>并发&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#c00000;&quot;>执行&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>的程序共同使用&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'Arial';&quot;>&lt;br />&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'Arial';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>资源是指由程序和数据组成的软件资源以及包含CPU、存储器、I/O设备等在内的硬件资源。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>通常情况下，系统采用竞争模式管理软件资源；为此，系统将为共享同一软件资源的多个任务提供互斥机制。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>对于硬件资源，系统常常用分配模式加以管理。该模式可以描述为：&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>&#x9;申请→分配→使用→释放→回收&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(39,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="364" transform="matrix(1,0,0,1,1346,549.38)" ed:width="69" ed:parentid="358" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L69,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">虚拟 </tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>是指把一个物理上的实体变为若干&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>逻辑&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>上的对应物。&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>物理实体&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>是&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>实际存在&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的，而&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>逻辑上的对应物&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>是&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>用户感受到&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的。&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>没有并发性，就谈不上虚拟性&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(43,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="366" transform="matrix(1,0,0,1,1346,596.25)" ed:width="65" ed:parentid="358" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L65,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">异步</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>在多道程序环境下，允许多个程序并发执行，但由于资源有限，进程的执行不是一贯到底的，而是走走停停，以不可预知的速度向前推进，这就是进程的异步性。&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>只有系统拥有并发性，才有可能导致异步性&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(39,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="373" transform="matrix(1,0,0,1,1555,779)" ed:width="122" ed:parentid="138" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">目标：</tspan>
            <tspan style="white-space:pre">安全、高效</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="382" transform="matrix(1,0,0,1,1539,1002.25)" ed:width="135" ed:parentid="146" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">目标：</tspan>
            <tspan style="white-space:pre">方便用户使用</tspan>
        </text>
    </g>
    <g ed:height="24.75" style="display:none" id="386" transform="matrix(1,0,0,1,1486.5,836.25)" ed:width="117" ed:parentid="362" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L117,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">互斥共享方式</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统中的某些资源，虽然可以提供给多个进程使用，但&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>一个时间段内只允许一个进程访问该资源&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>例如对摄像头设备的共享使用&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(91,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" style="display:none" id="388" transform="matrix(1,0,0,1,1486.5,867.5)" ed:width="117" ed:parentid="362" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L117,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">同时共享方式</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统中的某些资源，&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>允许一个时间段内由多个进程“同时”对它们进行访问&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>“同时”与并发的概念类似&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>例如文件的发送。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(91,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="390" transform="matrix(1,0,0,1,1442,533.75)" ed:width="226" ed:parentid="364" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L226,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">空分复用技术</tspan>
            <tspan style="white-space:pre">（如虚拟存储器技术）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="392" transform="matrix(1,0,0,1,1442,565)" ed:width="221" ed:parentid="364" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L221,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">时分复用技术</tspan>
            <tspan style="white-space:pre">（虚拟内存技术）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>微观上处理机在各个微小的时间段内交替为各个进程服务&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(195,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="42" id="396" transform="matrix(1,0,0,1,859,817.38)" ed:width="135" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L131,0C133.7,0,135,1.3,135,4L135,38C135,40.7,133.7,42,131,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">中断和异常</tspan>
        </text>
    </g>
    <g ed:height="42" id="398" transform="matrix(1,0,0,1,783,276.5)" ed:width="211" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L207,0C209.7,0,211,1.3,211,4L211,38C211,40.7,209.7,42,207,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">运行机制和结构体系</tspan>
        </text>
    </g>
    <g ed:height="42" id="400" transform="matrix(1,0,0,1,1241,1362.75)" ed:width="135" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L131,0C133.7,0,135,1.3,135,4L135,38C135,40.7,133.7,42,131,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">发展与分类</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="402" transform="matrix(1,0,0,1,1403,1153.75)" ed:width="96" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">手工操作阶段</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="404" transform="matrix(1,0,0,1,1403,1262.38)" ed:width="83" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">批处理阶段</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="406" transform="matrix(1,0,0,1,1403,1376.88)" ed:width="127" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L127,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">分时操作系统</tspan>
            <tspan x="8" style="white-space:pre" y="35">Time Sharing</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>计算机以&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>时间片&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>为单位轮流为各个用户/作业服务（采用时间片轮转的调度策略），各个用户可以通过终端与计算机进行交互，共享主机中的资源。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>对每个用户/作业都是完全公平的。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(101,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="408" transform="matrix(1,0,0,1,1403,1464.13)" ed:width="117" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L117,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">实时操作系统</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>计算机系统接收到外部信号后及时进行处理，并且要在严格的时限内处理完事件。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(91,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="410" transform="matrix(1,0,0,1,1403,1526.5)" ed:width="96" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">网络操作系统</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="412" transform="matrix(1,0,0,1,1403,1557.75)" ed:width="109" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">分布式操作系统</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="414" transform="matrix(1,0,0,1,1513,1206.38)" ed:width="292" ed:parentid="404" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L292,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">单道批处理系统</tspan>
            <tspan style="white-space:pre">（引入脱机输入/输出技术）</tspan>
            <tspan x="8" style="white-space:pre" y="35" class="st42">Uniprogramming</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>用磁带完成，并&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>监督程序&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>（操作系统的雏形）负责作业的输入、输出。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>串行处理&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>有资料说这时就已经有了一个操作系统，叫monitor，它是常驻内存的。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>内存中只允许有一道任务。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(266,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="43.75" id="416" transform="matrix(1,0,0,1,1513,1299.38)" ed:width="260" ed:parentid="404" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L260,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">多道批处理系统</tspan>
            <tspan style="white-space:pre">（操作系统开始出现）</tspan>
            <tspan x="8" style="white-space:pre" y="35" class="st42">Multiprogramming</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>例如现在的多进程、多线程。道就是进程。批处理就是一次处理一批&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>内存中允许有&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>多道任务&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>。当在执行的任务需要等待，则会切换任务执行，而之前那个任务会在某个时刻恢复执行。这些任务都处于开始和结束之间&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>充分发挥计算机系统部件的并行性，现代计算机系统都采用了多道程序设计技术。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(234,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="418" transform="matrix(1,0,0,1,1403,1589)" ed:width="135" ed:parentid="400" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">个人计算机操作系统</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="420" transform="matrix(1,0,0,1,1526,1153.88)" ed:width="395" ed:parentid="402" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L395,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">缺：用户独占全机、人机速度矛盾导致资源利用率低（串行处理）</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="422" transform="matrix(1,0,0,1,1832,1216)" ed:width="148" ed:parentid="414" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L148,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">优：缓解</tspan>
            <tspan style="white-space:pre" class="st50">人机速度矛盾</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="424" transform="matrix(1,0,0,1,1832,1247)" ed:width="260" ed:parentid="414" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L260,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16.1" class="st51">缺：程序</tspan>
            <tspan style="white-space:pre">串行</tspan>
            <tspan style="white-space:pre" class="st51">执行，资源利用率仍然低</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>内存中只能有一道程序运行，只有程序运行结束才能调入下一程序。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>CPU有大量的时间是在空闲等待I/O完成&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(234,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.5" id="426" transform="matrix(1,0,0,1,1800,1309)" ed:width="239" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L239,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st47">
            <tspan x="8" style="white-space:pre" y="16.1" class="st45">优：多道程序</tspan>
            <tspan style="white-space:pre">并发执行</tspan>
            <tspan style="white-space:pre" class="st45">，</tspan>
            <tspan style="white-space:pre">资源利用率</tspan>
            <tspan style="white-space:pre" class="st45">高</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="428" transform="matrix(1,0,0,1,1800,1340)" ed:width="265" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L265,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16.1" class="st51">缺：平均周转时间长，</tspan>
            <tspan style="white-space:pre">不提供人机交互</tspan>
            <tspan style="white-space:pre" class="st51">功能</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="430" transform="matrix(1,0,0,1,1557,1371)" ed:width="148" ed:parentid="406" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L148,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">优：提供人机交互功能</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="432" transform="matrix(1,0,0,1,1557,1402)" ed:width="174" ed:parentid="406" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L174,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">缺：不能优先处理紧急任务</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="434" transform="matrix(1,0,0,1,1547,1433)" ed:width="83" ed:parentid="408" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">硬实时系统</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="436" transform="matrix(1,0,0,1,1547,1464.25)" ed:width="83" ed:parentid="408" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">软实时系统</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="438" transform="matrix(1,0,0,1,1547,1495.5)" ed:width="328" ed:parentid="408" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L328,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">优：能优先处理紧急任务；      特点：及时性、可靠性</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="444" transform="matrix(1,0,0,1,1565,1589.13)" ed:width="160" ed:parentid="418" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L160,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">如Window XP、MacOS</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="450" transform="matrix(1,0,0,1,686,98.13)" ed:width="70" ed:parentid="398" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">运行机制</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="452" transform="matrix(1,0,0,1,639,285.63)" ed:width="117" ed:parentid="398" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L117,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">操作系统内核</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>操作系统还可以再细分：&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 最接近硬件部分是&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>内核&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>（软件），&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>是操作系统最基本最核心的部分：{ [时钟、中断、原语（微内核）]、进程管理、存储器管理、设备管理（大内核）}等&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 内核上面是&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>非内核功能&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：其他是啥来着&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'Arial';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>操作系统 = 内核+非内核&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>实现操作系统内核功能的哪些程序就是&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>内核程序&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑'; color:#c00000;&quot;>&lt;br />&lt;/p>&lt;/body>">
            <use transform="translate(91,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="454" transform="matrix(1,0,0,1,600,472.63)" ed:width="156" ed:parentid="398" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L156,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">操作系统的体系结构</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>其实有很多种分法，这是最常见的一种&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(130,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="456" transform="matrix(1,0,0,1,589,35.63)" ed:width="70" ed:parentid="450" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">两种指令</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="458" transform="matrix(1,0,0,1,555,88.63)" ed:width="104" ed:parentid="450" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L104,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">两种处理器</tspan>
            <tspan x="8" style="white-space:pre" y="35">状态双模式</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>用程序状态寄存器（&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>PSW&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>）中的某标志位来标识当前处理器处于什么状态。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>8个字节，它会跟踪当前系统的状态，其中的一个二进位控制运行状态，0为用户态，1为核心态。&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统调用命令的程序属于操作系统，它应该在管态下执行。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>用户程序只有通过计算机系统提供的访管指令才能&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>实现由目态转为管态&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，进而调用这些功能程序的目的。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(78,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="460" transform="matrix(1,0,0,1,589,160.63)" ed:width="70" ed:parentid="450" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">两种程序</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="462" transform="matrix(1,0,0,1,492,20)" ed:width="70" ed:parentid="456" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">特权指令</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="464" transform="matrix(1,0,0,1,479,51.25)" ed:width="83" ed:parentid="456" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">非特权指令</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="466" transform="matrix(1,0,0,1,400,82.5)" ed:width="128" ed:parentid="458" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L128,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">核心态（管态）</tspan>
        </text>
    </g>
    <symbol id="imgstar3">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="468" transform="matrix(1,0,0,1,419,113.75)" ed:width="109" ed:parentid="458" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">用户态（目态）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="470" transform="matrix(1,0,0,1,492,145)" ed:width="70" ed:parentid="460" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">内核程序</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="472" transform="matrix(1,0,0,1,492,176.25)" ed:width="70" ed:parentid="460" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">应用程序</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="474" transform="matrix(1,0,0,1,542,207.5)" ed:width="70" ed:parentid="452" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">时钟管理</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="476" transform="matrix(1,0,0,1,542,238.75)" ed:width="70" ed:parentid="452" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">中断处理</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="478" transform="matrix(1,0,0,1,568,270)" ed:width="44" ed:parentid="452" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L44,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">原语</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="480" transform="matrix(1,0,0,1,438,332.5)" ed:width="174" ed:parentid="452" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">对系统资源进行管理的功能</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="482" transform="matrix(1,0,0,1,146,270.13)" ed:width="395" ed:parentid="478" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L395,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">是一种特殊的程序，其执行具有原子性，运行时间较短且调用频繁</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="484" transform="matrix(1,0,0,1,516,426)" ed:width="57" ed:parentid="454" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">大内核</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="486" transform="matrix(1,0,0,1,468,509.75)" ed:width="105" ed:parentid="454" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L105,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">微内核</tspan>
            <tspan x="8" style="white-space:pre" y="35">Microkernels</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="488" transform="matrix(1,0,0,1,406,426.25)" ed:width="83" ed:parentid="484" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L83,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">优：高性能</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="490" transform="matrix(1,0,0,1,237,457.25)" ed:width="252" ed:parentid="484" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L252,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">缺：内核代码庞大，结构混乱，难以维护</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="492" transform="matrix(1,0,0,1,341,301.25)" ed:width="70" ed:parentid="480" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">进程管理</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="494" transform="matrix(1,0,0,1,328,332.5)" ed:width="83" ed:parentid="480" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">存储器管理</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="496" transform="matrix(1,0,0,1,341,363.75)" ed:width="70" ed:parentid="480" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">设备管理</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="498" transform="matrix(1,0,0,1,202,519.5)" ed:width="239" ed:parentid="486" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L239,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">优：内核功能少，结构清晰，方便维护</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="500" transform="matrix(1,0,0,1,124,550.5)" ed:width="317" ed:parentid="486" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L317,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">缺：需要频繁地在核心态和用户态之间切换，性能低</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="508" transform="matrix(1,0,0,1,160,82.63)" ed:width="213" ed:parentid="466" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L213,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">除了陷入指令不能执行，其他都可</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="510" transform="matrix(1,0,0,1,257,113.88)" ed:width="135" ed:parentid="468" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L135,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">只能执行非特权指令</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="512" transform="matrix(1,0,0,1,278,145.13)" ed:width="187" ed:parentid="470" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L187,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">运行在核心态，系统的管理者</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="514" transform="matrix(1,0,0,1,278,176.38)" ed:width="187" ed:parentid="472" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L187,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">运行在用户态，为了系统安全</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="516" transform="matrix(1,0,0,1,330,20.13)" ed:width="135" ed:parentid="462" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L135,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">只能在核心态下执行</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="518" transform="matrix(1,0,0,1,133,395)" ed:width="356" ed:parentid="484" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L356,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">将操作系统的主要功能模块都作为系统内核，运行在核心态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="520" transform="matrix(1,0,0,1,254,488.25)" ed:width="187" ed:parentid="486" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L187,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">只把</tspan>
            <tspan style="white-space:pre" class="st50">最基本的功能</tspan>
            <tspan style="white-space:pre">保留在内核</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="522" transform="matrix(1,0,0,1,723,608)" ed:width="109" ed:parentid="396" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">中断机制的诞生</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="524" transform="matrix(1,0,0,1,691,654.63)" ed:width="141" ed:parentid="396" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L141,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">中断的概念和作业</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="526" transform="matrix(1,0,0,1,709,763.75)" ed:width="123" ed:parentid="396" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L123,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">中断的分类</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>通过“中断信号来自CPU内部还是外部”来判断是内/外中断&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(97,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="528" transform="matrix(1,0,0,1,632,888.75)" ed:width="200" ed:parentid="396" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L200,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">补充：内中断的另一种分类方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="530" transform="matrix(1,0,0,1,710,997.63)" ed:width="122" ed:parentid="396" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">外中断的处理过程</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="532" transform="matrix(1,0,0,1,203,639.25)" ed:width="461" ed:parentid="524" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L461,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">发生中断，就意味着需要操作系统接入开展管理工作，CPU会立即进入核心态</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="534" transform="matrix(1,0,0,1,331,670.25)" ed:width="333" ed:parentid="524" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L333,24.5" stroke-linejoin="round" fill="none"/>
        <g transform="translate(7,3.25)">
            <use transform="translate(0,0)" xlink:href="#imgflag1"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16.1">“中断”是CPU</tspan>
            <tspan style="white-space:pre" class="st50">从用户态进入核心态的唯一途径</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>核心态→用户态 是通过执行一个特权指令，将PSW=0&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统要&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>判定&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>你这个进入系统的命令符不符合规则、能不能执行 —— 软中断，与真正的中断不一样哦~&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(307,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <symbol id="imgflag1">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="43.75" id="536" transform="matrix(1,0,0,1,487,723)" ed:width="195" ed:parentid="526" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L195,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="67" style="white-space:pre" y="16">内中断</tspan>
            <tspan x="8" style="white-space:pre" y="35">（也称异常、例外、陷入）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>信号的来源：CPU&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>内部&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>与当前执行的指令&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>有关&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(169,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="538" transform="matrix(1,0,0,1,547,810.63)" ed:width="135" ed:parentid="526" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">外中断（简称中断）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="318" transform="matrix(1,0,0,1,289,701.25)" ed:width="171" ed:parentid="536" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L171,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">自愿中断——指令中断</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统调用时使用的&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>访管指令&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，又叫&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>陷入指令&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>trap指令&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(145,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="320" transform="matrix(1,0,0,1,390,748.13)" ed:width="70" ed:parentid="536" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">强迫中断</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="322" transform="matrix(1,0,0,1,272,732.5)" ed:width="91" ed:parentid="320" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">硬件故障</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>如缺页，在第九章讲到&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="324" transform="matrix(1,0,0,1,272,763.75)" ed:width="91" ed:parentid="320" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">软件中断</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>事件总是由中断或陷阱引起。&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>陷阱（或异常)&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>是一种软件中断，如整数除0、信号中断。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="330" transform="matrix(1,0,0,1,429,795)" ed:width="91" ed:parentid="538" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">外设请求</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>I/O操作完成发出的中断信号&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="334" transform="matrix(1,0,0,1,429,826.25)" ed:width="91" ed:parentid="538" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">人工干预</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>用户强制终止一个进程&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="336" transform="matrix(1,0,0,1,447,857.5)" ed:width="158" ed:parentid="528" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L158,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">陷阱、陷入（trap）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>有意而为之的异常，如&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>系统调用&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(132,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="338" transform="matrix(1,0,0,1,484,888.75)" ed:width="121" ed:parentid="528" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L121,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">故障（fault）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>有错误条件引起的，可能被故障处理程序修复，如缺页（在第九章讲到）&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(95,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="340" transform="matrix(1,0,0,1,477,920)" ed:width="128" ed:parentid="528" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L128,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">终止（abort）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>不可恢复的致命错误造成的结果，终止处理程序不再将控制返回给引发终止的应用程序，如整数除0&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(102,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.5" id="342" transform="matrix(1,0,0,1,274,951.25)" ed:width="409" ed:parentid="530" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L409,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">每条指令执行结束后，CPU都要检查是否有外部中断信号（用户态）</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="344" transform="matrix(1,0,0,1,331,982.25)" ed:width="352" ed:parentid="530" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L352,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">若有外部中断信号，则需要保护被中断进程的CPU环境</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>如PSW、PC、各种通用寄存器&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(326,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.5" id="346" transform="matrix(1,0,0,1,353,1013.25)" ed:width="330" ed:parentid="530" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L330,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">根据中断信号类型转入相应的中断处理程序（核心态）</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="349" transform="matrix(1,0,0,1,313,1044.25)" ed:width="370" ed:parentid="530" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L370,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">恢复原进程的CPU环境并退出中断，返回原进程继续往下执行</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="351" transform="matrix(1,0,0,1,483,608.13)" ed:width="213" ed:parentid="522" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L213,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">为了发明操作系统，引入中断机制</tspan>
        </text>
    </g>
    <g ed:height="42" id="369" transform="matrix(1,0,0,1,857,1358.25)" ed:width="137" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L133,0C135.7,0,137,1.3,137,4L137,38C137,40.7,135.7,42,133,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st40">
            <tspan x="18" style="white-space:pre" y="26.9">系统调用</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>由OS实现的应用软件在运行过程中可以引用的系统服务&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(102,13)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="377" transform="matrix(1,0,0,1,622,1211.13)" ed:width="208" ed:parentid="369" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L208,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">什么是系统调用，有何作用？</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>凡是与资源有关的操作、会直接影响到其他进程的操作，一定需要操作系统介入，即需要通过系统调用来实现。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>这样&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>可以保证系统的稳定性和安全性&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，防止用户非法操作&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(182,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="379" transform="matrix(1,0,0,1,650,1460.63)" ed:width="180" ed:parentid="369" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L180,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">系统调用和库函数的区别</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="381" transform="matrix(1,0,0,1,674,1585.13)" ed:width="156" ed:parentid="369" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L156,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">系统调用背后的过程</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>系统调用发生在用户态，&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>对系统调用的&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>处理&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>发生在核心态&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>执行陷入指令会产生内中断，使处理器从用户态进入核心态&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(130,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="385" transform="matrix(1,0,0,1,303,1101.75)" ed:width="292" ed:parentid="377" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L292,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">操作系统提供给应用程序/程序员使用的接口</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>可以理解为一种可供&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>应用程序调用的特殊函数&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(266,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="395" transform="matrix(1,0,0,1,291,1133)" ed:width="304" ed:parentid="377" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L304,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">应用程序通过系统调用来请求获得操作系统的服务</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="441" transform="matrix(1,0,0,1,324,1164.25)" ed:width="271" ed:parentid="377" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L271,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">系统调用会使处理器从用户态进入核心态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="443" transform="matrix(1,0,0,1,551,1258)" ed:width="44" ed:parentid="377" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L44,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">分类</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="447" transform="matrix(1,0,0,1,295,1195.5)" ed:width="229" ed:parentid="443" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L229,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">设备管理</tspan>
            <tspan style="white-space:pre" class="st51">（设备的 请求/释放/启动）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="449" transform="matrix(1,0,0,1,295,1226.75)" ed:width="229" ed:parentid="443" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L229,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">文件管理</tspan>
            <tspan style="white-space:pre" class="st51">（文件的 读写/创建/删除）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="503" transform="matrix(1,0,0,1,263,1258)" ed:width="261" ed:parentid="443" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L261,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">进程控制</tspan>
            <tspan style="white-space:pre" class="st51">（进程的 创建/撤销/阻塞/唤醒）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="505" transform="matrix(1,0,0,1,271,1289.25)" ed:width="253" ed:parentid="443" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L253,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">进程通信</tspan>
            <tspan style="white-space:pre" class="st51">（进程之间的 消息/信号 传递）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="507" transform="matrix(1,0,0,1,327,1320.5)" ed:width="197" ed:parentid="443" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L197,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">内存管理</tspan>
            <tspan style="white-space:pre" class="st51">（内存的 分配/回收）</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="541" transform="matrix(1,0,0,1,384,1414.25)" ed:width="239" ed:parentid="379" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L239,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">系统调用是</tspan>
            <tspan style="white-space:pre" class="st50">操作系统向上层提供的接口</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="543" transform="matrix(1,0,0,1,384,1445.25)" ed:width="239" ed:parentid="379" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L239,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">有的库函数是</tspan>
            <tspan style="white-space:pre" class="st50">对系统调用的进一步封装</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="545" transform="matrix(1,0,0,1,176,1507.25)" ed:width="447" ed:parentid="379" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L447,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">当今编写的应用程序大多是通过高级语言提供的库函数间接地进行系统调用</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="547" transform="matrix(1,0,0,1,506,1538.25)" ed:width="141" ed:parentid="381" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L141,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgpriority1"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">传递系统调用参数</tspan>
        </text>
    </g>
    <symbol id="imgpriority1">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="549" transform="matrix(1,0,0,1,446,1569.5)" ed:width="201" ed:parentid="381" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L201,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgpriority2"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">执行陷入指令（用户态）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>int指令的参数指明了系统调用号，在csapp书上异常那章有更详细介绍&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(175,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <symbol id="imgpriority2">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="551" transform="matrix(1,0,0,1,389,1600.75)" ed:width="258" ed:parentid="381" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L258,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgpriority3"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">执行系统调用相应服务程序（核心态）</tspan>
        </text>
    </g>
    <symbol id="imgpriority3">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="553" transform="matrix(1,0,0,1,532,1632)" ed:width="115" ed:parentid="381" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L115,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgpriority4"/>
        </g>
        <text class="st46">
            <tspan x="27" style="white-space:pre" y="16">返回用户程序</tspan>
        </text>
    </g>
    <symbol id="imgpriority4">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.5" id="565" transform="matrix(1,0,0,1,332,1476.25)" ed:width="291" ed:parentid="379" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L291,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">普通应用程序可进行系统调用，也可使用库函数</tspan>
        </text>
    </g>
    <g ed:height="49" id="593" transform="matrix(1,0,0,1,1346,241.75)" ed:width="108" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L104,0C106.7,0,108,1.3,108,4L108,45C108,47.7,106.7,49,104,49L4,49C1.3,49,0,47.7,0,45L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st52">
            <tspan x="9" style="white-space:pre" y="18.9">现在OS的四</tspan>
            <tspan x="9" style="white-space:pre" y="40">种基本观点</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="595" transform="matrix(1,0,0,1,1481,222.63)" ed:width="70" ed:parentid="593" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">从外部看</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="597" transform="matrix(1,0,0,1,1481,275.63)" ed:width="115" ed:parentid="593" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L115,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">从内部看</tspan>
            <tspan x="8" style="white-space:pre" y="35">OS开发者观点：</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="599" transform="matrix(1,0,0,1,1578,207)" ed:width="174" ed:parentid="595" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">计算机用户观点：用户环境</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="601" transform="matrix(1,0,0,1,1578,238.25)" ed:width="161" ed:parentid="595" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">应用程序员观点：虚拟机</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="607" transform="matrix(1,0,0,1,1623,269.5)" ed:width="70" ed:parentid="597" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">资源管理</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="609" transform="matrix(1,0,0,1,1623,300.75)" ed:width="70" ed:parentid="597" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">作业组织</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="614" transform="matrix(1,0,0,1,698,1367.38)" ed:width="132" ed:parentid="369" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L132,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">当前两种常用的API</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="616" transform="matrix(1,0,0,1,600,1351.75)" ed:width="71" ed:parentid="614" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L71,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">POSIX.1</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="618" transform="matrix(1,0,0,1,608,1383)" ed:width="63" ed:parentid="614" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L63,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">WIN32</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="620" transform="matrix(1,0,0,1,1403,1080.38)" ed:width="96" ed:parentid="126" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">非功能性需求</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="622" transform="matrix(1,0,0,1,1526,1064.75)" ed:width="395" ed:parentid="620" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L395,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">性能和效率：</tspan>
            <tspan style="white-space:pre">最大化吞吐量，最小化响应时间、满足尽量多的用户</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="624" transform="matrix(1,0,0,1,1526,1096)" ed:width="369" ed:parentid="620" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L369,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">公平性、可靠性、安全性、可伸缩性、可扩展性、可移植性等</tspan>
        </text>
    </g>
    <g ed:height="27" id="627" transform="matrix(1,0,0,1,1494,476.25)" ed:width="291" ed:parentid="626" ed:layout="rightmap">
        <path stroke="#f8ae1a" d="M4,0L287,0C289.7,0,291,1.3,291,4L291,23C291,25.7,289.7,27,287,27L4,27C1.3,27,0,25.7,0,23L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" fill="#fef2e7"/>
        <text class="st53">
            <tspan x="6" style="white-space:pre" y="16.4">并发和共享是两个最基本的特征，二者互为存在条件</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="634" transform="matrix(1,0,0,1,1657,1464.38)" ed:width="265" ed:parentid="436" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L265,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">能接受偶尔违反时间规定，如火车订票系统</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="636" transform="matrix(1,0,0,1,1657,1433.13)" ed:width="434" ed:parentid="434" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L434,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">必须在绝对严格的规定时间内完成处理，如导弹控制系统、自动驾驶系统</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="630" transform="matrix(1,0,0,1,1832,1185)" ed:width="304" ed:parentid="414" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L304,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">特点：单路性、独占性、自动性、封闭性、顺序性</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="633" transform="matrix(1,0,0,1,1800,1278)" ed:width="356" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L356,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">特点：多路性、共享性、自动性、封闭性、无序性、调度性</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="639" transform="matrix(1,0,0,1,1346,63)" ed:width="514" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,43.8L514,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16" class="st42">定义（有很多种定义）</tspan>
            <tspan style="white-space:pre">：操作系统是控制和管理算机硬件和软件资源，合理地组织算机</tspan>
            <tspan x="8" style="white-space:pre" y="35">工作流程，以及方便用户使用计算机的一个大型程序。</tspan>
        </text>
    </g>
    <g ed:height="22.5" id="645" transform="matrix(1,0,0,1,1526,1527.63)" ed:width="294" ed:parentid="410" ed:layout="rightmap">
        <path stroke="#002060" d="M0,22.5L294,22.5" stroke-linejoin="round" fill="none"/>
        <text class="st54">
            <tspan x="8" style="white-space:pre" y="14.1">实现网络中各种资源的共享和各台计算机之间的通信</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="647" transform="matrix(1,0,0,1,1539,1557.75)" ed:width="174" ed:parentid="412" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16">主要特点：分布性和并行性</tspan>
        </text>
    </g>
    <g ed:height="22.5" id="649" transform="matrix(1,0,0,1,1740,1558.88)" ed:width="390" ed:parentid="647" ed:layout="rightmap">
        <path stroke="#002060" d="M0,22.5L390,22.5" stroke-linejoin="round" fill="none"/>
        <text class="st54">
            <tspan x="8" style="white-space:pre" y="14.1">任何工作都可以分布在这些计算机上，由它们并行、协同完成这个任务</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="644" transform="matrix(1,0,0,1,21,51.38)" ed:width="431" ed:parentid="464" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L431,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st41">
            <tspan x="8" style="white-space:pre" y="16.1">其中访管指令属于非特权指令，会产生一个软中断，使cpu由</tspan>
            <tspan style="white-space:pre" class="st42">目态→管态</tspan>
        </text>
    </g>
    <g ed:height="22.5" id="652" transform="matrix(1,0,0,1,1787,910.75)" ed:width="150" ed:parentid="166" ed:layout="rightmap">
        <path stroke="#696969" d="M0,22.5L150,22.5" stroke-linejoin="round" fill="none"/>
        <text class="st54">
            <tspan x="8" style="white-space:pre" y="14.1">在</tspan>
            <tspan style="white-space:pre" class="st42">控制级</tspan>
            <tspan style="white-space:pre">给予用户的支持</tspan>
        </text>
    </g>
    <g ed:height="28" id="659" transform="matrix(1,0,0,1,1346,361.63)" ed:width="204" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L200,0C202.7,0,204,1.3,204,4L204,24C204,26.7,202.7,28,200,28L4,28C1.3,28,0,26.7,0,24L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st52">
            <tspan x="9" style="white-space:pre" y="18.9">硬件（随手补充，非OS）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="660" transform="matrix(1,0,0,1,1577,332)" ed:width="137" ed:parentid="659" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L137,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">CPU，中央处理单元</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="661" transform="matrix(1,0,0,1,1577,363.25)" ed:width="113" ed:parentid="659" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L113,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">memory，内存</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="662" transform="matrix(1,0,0,1,1577,394.5)" ed:width="178" ed:parentid="659" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L178,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st46">
            <tspan x="8" style="white-space:pre" y="16">I/O device，输入输出设备</tspan>
        </text>
    </g>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
